﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Max.PH4.Shoppgin.Admin.DTO
{
    public class ResponseResultDto
    {
        /// <summary>
        /// 服务器的状态码（200成功，500内部错误，其它的自定义） ----是给前台程序员判断的
        /// </summary>
        public ResponseStateCode Code { get; set; } = ResponseStateCode.Success;

        private string message;
        /// <summary>
        /// 提示消息   ---- 是用来给使用的用户提示的
        /// </summary>
        public string Message { 
            get 
            {
                if (string.IsNullOrEmpty(message))
                {
                    message = this.GetStateCodeDisplayName();
                }
                return message; 
            } 
            set 
            { 
                message = value;
            } 
        }

        /// <summary>
        /// 返回的数据
        /// </summary>
        public dynamic Data { get; set; }

        //获取状态码的显示的名称
        private string GetStateCodeDisplayName()
        {
            //获取枚举类型的对象
            var t = typeof(ResponseStateCode);

            //获取这个枚举中，具体的字段对象（这个字段是根据状态码来的）
            var f = t.GetField(this.Code.ToString());

            //获取这个字段的自定义特性Attribute
            var o = f.GetCustomAttributes(typeof(DisplayAttribute), true).FirstOrDefault();

            if (o != null)
            {
                return ((DisplayAttribute)o).Name;
            }
            else
            {
                return f.Name;
            }
        }
    }

    public enum ResponseStateCode
    {
        Success = 200,


        [Display(Name = "服务器内部错误")]
        Failed = 500,

        [Display(Name = "参数无效")]
        Error_ParamNoVailed = -30001,

        [Display(Name = "用户名错误")]
        Error_UserName = -40001,

        [Display(Name = "购物车中未找到该商品")]
        Error_PorductNoExists = -50001,

        [Display(Name ="库存不足")]
        Error_StockNoEnough = -50002,
    }
}
